As technology advances, data storage is increasingly important and data storage capacities are increasing rapidly. Correspondingly, the size of data storage arrays and their demands for storage have increased rapidly. Ever increasing amounts of data are required to be highly available and protected from corruption or damage that may be caused by any of a variety of factors, such as natural disasters and power failures, etc. As a result, increasingly complex data storage clusters are used to satisfy the demands for data storage and retrieval.
Similarly, virtualization of computers and/or operating systems has become increasingly important to enable server consolidation such that many small physical servers can be replaced by one larger physical server. This results in increased and more efficient utilization of costly hardware resources such as central processing units (CPU), thereby allowing power savings and hardware cost savings.
Virtual environments typically include virtualized computers and/or operating systems known as virtual machines which require access to storage. In one conventional setup, each virtual machine has a storage file allocated to it which acts as storage for the virtual machine. The storage for the storage file can be allocated for the virtual machine “on demand,” such as in two megabyte chunks. However, the allocation of storage on demand causes fragmentation as repeated on demand allocations are performed thereby negatively impacting system performance. Conventional solutions thus allocate the storage for each virtual machine on a fixed basis even though a virtual machine may use much less than it is allocated. When a fixed storage file is allocated to a virtual machine, it is filled with zeros representing free space. Although fixed space allocation increases system performance, typical allocations may include 70% unused or free space.
Each of the fixed storage files may be allocated on one or more storage volumes large enough to host the fixed storage files for all the virtual machines running on a physical server. When a single virtual machine has many such fixed storage files, a single large volume may host only the files from that particular virtual machine. Thus, the storage volumes are large in size in general. The storage volume, with the fixed storage files, may need to be copied when the storage volume is migrated from one storage array to another or when adding a mirror volume for offhost backup. Copying the storage volume often can take large amounts of time as the each of the fixed storage files, e.g., terabytes, must be copied, including those portions that are filled with zeros representing free space. Copying the whole storage volume thus involves significant amounts of time and can also negatively impact system performance. Further, conventional systems require the virtual machine be taken offline while the copy operation is performed, resulting in expensive downtime. Therefore, while fixed allocation may increase system performance, it negatively impacts the storage copy function when the virtual machine's storage volume needs to be mirrored.
Thus, a need exists to copy the volume hosting virtual machine files in an efficient manner without requiring the virtual machines to be taken offline.